#study5从 列表的创建 到 列表的查询 、列表的修改 到 列表的排序

#列表(list)：可以存储多个元素，相当于数组；列表可以同时存储多个字符串、整形、浮点型……，可以存储相同的元素，
lst=['test',750,2.71828]#列表的第一种创建方式
print(lst,type(lst),id(lst))

a=list(['test',750,2.71828,3.14159,150,'TEST'])#列表的第二种创建方式
print(a,type(a),id(a))

#列表的索引
print(lst[0])#[……]的元素的索引数字：从前往后的数字：从0开始到n；从后往前的数字：从-1到-n-1；若没有改字符串报错

print(lst.index('test'))#index的前面是小数点！！！；index函数用于查找列表的元素的数字编码（从前往后）；如果列表中有相同元素则只返回查找到的第一个元素;超出索引数字范围报错
print(a.index(750))
print(lst.index('test',0,2))#查找编号为0到1（不包括2）的元素为test的

#列表的切片操作
print(a[1:100:2])#切片不会受超出列表数额的报错，会切割出‘start‘到’end-1‘的数字；如果步长没写默认为1，‘start’没写默认是0（冒号要打），end不写默认为∞；step是负数则从后往前读取
print(a[::-1])#敲撩利用列表进行整体颠倒顺序

#判断列表中是否有某元素
print(750 in a)#in或者not in

#历遍列表中的元素
for k in a:
    print(k)

#增加列表中的元素（append（）在末尾添加一个元素、extend（）在末尾至少添加一个元素、insert（）在任意位置添加一个元素、切片：在任意位置添加至少一个元素）
a.append(123)
print(a,id(a))#id一样
b=[456,789]
a.append(b)#将b作为一个元素添加到了a当中
print(a)
a.extend(b)
print(a)#将b作为多个元素添加进去
lst.insert(2,'TEST')#在编号为2的地方加入'TEST'
print(lst)

#列表的删除操作
print('用来对照的原数组：',a)
a.remove('TEST')#remove()一次只删除一个元素，如有重复元素只只删除第一个（从左往右），元素不存在抛出ValueError
print(a)
a.pop(4)#pop()删除指定索引的上的元素，如没有删除最后一个元素，如果指定索引不存在则抛出IndexError
print(a)
l=[456,789]#切片：至少删除一个元素，但会产生新的列表对象
a.remove(l)
print(a)#这个似乎不是正确操作
a[4:6]=[]
print(a)#这个才是正确操作
x=[123,456,789]#clear()清除列表
x.clear()
print(x)
del x#del()删除列表，因为会报错就不print()了

#列表的修改操作
print('用来对照的原列表：',a)#为指定索引的元素重新赋值
a[4]=123
print(a)

a[1:3]=[2.71828,3.14159,2653589,750]#为指定切片的元素重新赋值
print(a)

#列表的排序操作
a.remove('test')#为了后续程序的进行，先给列表进行一些操作
print('用来对照的原列表：',a)
#sort()函数排序（默认从小到大排序,也就是升序排序），可以指定reverse=True进行降序排序
a.sort()
print(a)
a.sort(reverse=True)#降序排序
print(a)
anew=sorted(a,reverse=True)#sorted()函数进行排序，会产生一个新的列表对象
print(anew)

#列表生成式
g=[h+1 for h in range(1,10)]#让h（左）生成关于for循环的数字的列表，h可进行计算
print(g)

#在课外看到的有趣操作
p=[43,210]
q=[987,65]
print(p+q)

#还有列表的比较操作
a=[1,2]
b=[1,3]
c=[2,1]
print(a == b)
print(a == c)

print(list(range(6)))#生成0到5的列表

#字符串快速列表的方法
print(list('hello'))